#define _CRT_SECURE_NO_WARNINGS 1
//
//#include <bits/stdc++.h>
//#include <unordered_map>
//using namespace std;
//int d[4][2] = { {1,0},{0,1},{-1,0},{0,-1} };
//void dfs(string start)
//{
//    string end = "12345678x";
//    queue<string> q;
//    unordered_map<string, int> dis;
//    dis[start] = 0;
//    q.push(start);
//    //cout << 1;
//
//    while (!q.empty())
//    {
//        auto t = q.front();
//        int distance = dis[t];
//        if (t == end)
//        {
//            cout << distance << endl;
//            return;
//        }
//        q.pop();
//        int k = t.find('x');
//        int x = k / 3;
//        int y = k % 3;
//        for (int i = 0; i < 4; i++)
//        {
//            //cout << 2;
//            int nx = x + d[i][0];
//            int ny = y + d[i][1];
//            if (nx >= 0 && nx <= 2 && ny >= 0 && ny <= 2)
//            {
//                swap(t[k], t[3 * nx + ny]);
//                //cout << 4;
//                if (dis[t] == 0)
//                {
//                    q.push(t);
//                    dis[t] = distance + 1;
//                }
//                swap(t[k], t[3 * nx + ny]);
//            }
//        }
//        
//    }
//    cout << -1 << endl;
//}
//
//int main()
//{
//    string start;
//    for (int i = 1; i <= 9; i++)
//    {
//        string s;
//        cin >> s;
//        start += s;
//    }
//    dfs(start);
//    return 0;
//}